//package com.luli.config.websocketSpringBOot.entity;
//
///**
// * 陆离
// * 2024/12/25
// */
//
//import com.jcraft.jsch.Channel;
//import com.jcraft.jsch.ChannelExec;
//import com.jcraft.jsch.JSch;
//import com.jcraft.jsch.Session;
//
//
//import com.luli.config.websocketSpringBOot.LinuxNetworkStatusGetterViaSSH;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.StringUtils;
//
//
//import java.io.BufferedReader;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
///**
// * https://www.doubao.com/thread/w2d15b6b13376c339
// */
//@Slf4j
//public class LinuxCpuUsageMonitorViaSSH {
//
//
//    public static List<LinuxData> getCpuUsages(List<LinuxParam> serverInfos) {
//        List<LinuxData> cpuUsages = new ArrayList<>();
//        try {
//            for (LinuxParam serverInfo : serverInfos) {
//                JSch jsch = new JSch();
//                Session session = jsch.getSession(serverInfo.user, serverInfo.host, serverInfo.port);
//                session.setPassword(serverInfo.password);
//                session.setConfig("StrictHostKeyChecking", "no");
//                session.connect();
//                Channel channel = session.openChannel("exec");
//
//                //服务器状态
//                boolean internetConnectivity = LinuxNetworkStatusGetterViaSSH.checkInternetConnectivity(channel,session);
//                if (internetConnectivity) {
//                    LinuxData linuxData = new LinuxData();
//                    //cpu使用率
//                    /**
//                     * top -bn1表示以批处理模式运行top命令一次，获取系统资源信息
//                     * grep "Cpu(s)"过滤出包含Cpu(s)的行
//                     * awk '{print $2 + $4}'计算并输出用户空间和内核空间CPU使用率之和
//                     */
//                    String cpuUsageStr = getLinuxAttribute(channel, session, "top -bn1 | grep \"Cpu(s)\" | awk '{print $2 + $4}'");
//                    double cpuUsage = StringUtils.isNotEmpty(cpuUsageStr) ? Double.parseDouble(cpuUsageStr) : 0;
//
//                    //内存使用率
//                    String freeUsageStr = getLinuxAttribute(channel, session, "free -m | awk 'NR==2{printf \"%.2f\\n\", ($3/$2)*100}'");
//                    double freeUsage = StringUtils.isNotEmpty(freeUsageStr) ? Double.parseDouble(freeUsageStr) : 0;
//
//                    //服务器名称
//                    String hostname = getLinuxAttribute(channel, session, "hostname");
//
//                    //ip
//                    String ip = serverInfo.host;
//
//                    linuxData.setCpuUsage(cpuUsage);
//                    linuxData.setHostname(hostname);
//                    linuxData.setFreeUsageStr(freeUsage);
//                    linuxData.setIp(ip);
//                    linuxData.setStatus(internetConnectivity);
//                    linuxData.setDateTime(getDateTime(new Date()));
//                    cpuUsages.add(linuxData);
//                    channel.disconnect();
//                    session.disconnect();
//                }else {
//                    LinuxData linuxData = new LinuxData();
//                    linuxData.setCpuUsage(-1);
//                    linuxData.setHostname(null);
//                    linuxData.setFreeUsageStr(-1);
//                    linuxData.setIp(serverInfo.host);
//                    linuxData.setDateTime(getDateTime(new Date()));
//                    linuxData.setStatus(internetConnectivity);
//                    cpuUsages.add(linuxData);
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        return cpuUsages;
//    }
//
//
//    private static String getLinuxAttribute(Channel channel, Session session, String instruction) {
//        try {
//            channel = session.openChannel("exec");
//            ((ChannelExec) channel).setCommand(instruction);
//            channel.connect();
//
//            InputStream in = channel.getInputStream();
//            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
//            return reader.readLine();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    public static void main(String[] args) {
//        List<LinuxParam> serverInfos = new ArrayList<>();
//        serverInfos.add(new LinuxParam("192.168.175.135", 22, "root", "lzp+19991128"));
//        serverInfos.add(new LinuxParam("192.168.175.132", 22, "root", "root123"));
//
////        List<LinuxData> cpuUsages = getCpuUsages(serverInfos);
////        for (LinuxData cpuUsage : cpuUsages) {
////            System.out.println("=======" + JSON.toJSONString(cpuUsage));
////        }
//
//    }
//
//    /**
//     * 日期时间转yyyy-MM-dd HH:mm:ss
//     *
//     */
//    public static String getDateTime(Date date) {
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//        return format.format(date);
//    }
//}
